4. Local Static Object

비지역 정적 객체의 초기화 순서는 개별 번역 단위에서 정해진다.

정적 객체(static object):
생성된 시점에서부터, 프로그램이 종료될 때까지 살아 있는 객체
번역 단위(translation unit):
컴파일을 통해 목적 파일(object file)을 만드는 바탕이 되는 소스 코드

따라서 별개의 번역 단위에서 정의된 비지역 정적 객체들의 초기화 순서는 정해지지 않는다.

특정 객체가 초기화되기 전에 객체를 사용하는 일이 발생하지 않도록 하기 위해
멤버가 아닌 기본 제공 타입 객체는 직접 초기화를 해야 하며, 멤버 초기화 함수를 사용한다.
비지역 정적 객체에 영향을 끼치는 불확실한 초기화 순서는 단일체 패턴(Singleton Pattern)으로 정의

객체를 직접사용하지 않고, 참조자를 반환하는 함수를 사용
class FileSystem{ /* ... */ };
FileSystem& tfs(void){
static FileSystem fs; //
return fs;
}
class Directory{ /* ... */ };
Directory::Directory(params){
// ...
std::size_t disks=tfs().numDisks();
// ...
}
Directory& tempDir(void){
static Directory td;
return td;
}